package com.tobbetu.denemeproje;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author selaskar
 */
public class Zamanlama {

    private int saat;
    private int dakika;
    private int saniye;
    private int milisaniye;
    private int milisaniye2;

    protected Zamanlama(int saat,int dakika,int saniye,int milisaniye) throws Exception
    {
        this.saat=saat;
        this.dakika=dakika;
        this.saniye=saniye;
        this.milisaniye=milisaniye;

        if(saat>=99 | saat<0 | dakika>=60 | dakika<0 | saniye>=60 | saniye<0 | milisaniye>=1000 | milisaniye<0)
            throw new Exception("Girilen değerle, zamanlama oluşturulamaz");
    }

    protected void ekle(int eklenecekMilisaniye) throws Exception
    {
        boolean elde=false;
        Zamanlama eklenecekNesne=çözümle(eklenecekMilisaniye);
        milisaniye+=eklenecekNesne.milisaniye;
        if(milisaniye>=1000){
            elde=true;
            milisaniye=milisaniye%1000;
        }
        saniye+=eklenecekNesne.saniye+(elde ? 1 : 0);
        elde=false;
        if(saniye>=60)
        {
            elde=true;
            saniye=saniye%60;
        }
        dakika+=eklenecekNesne.dakika+(elde ? 1 : 0);
        elde=false;
        if(dakika>=60)
        {
            elde=true;
            dakika=dakika%60;
        }
        saat+=eklenecekNesne.saat+(elde ? 1 : 0);
        if(saat>99)
            throw new Exception("sonuç çok büyük");

    }
    protected void çıkar(int çıkarılacakMilisaniye) throws Exception
    {
        boolean borç=false;
        Zamanlama çıkarılacakNesne=çözümle(Math.abs(çıkarılacakMilisaniye));
        milisaniye-=çıkarılacakNesne.milisaniye;
        if(milisaniye<0){
            borç=true;
            milisaniye+=1000;
        }
        saniye-=çıkarılacakNesne.saniye+(borç ? 1 : 0);
        borç=false;
        if(saniye<0)
        {
            borç=true;
            saniye+=60;
        }
        dakika-=çıkarılacakNesne.dakika+(borç ? 1 : 0);
        borç=false;
        if(dakika<0)
        {
            borç=true;
            dakika+=60;
        }
        saat-=çıkarılacakNesne.saat+(borç ? 1 : 0);
        if(saat<0)
            throw new Exception("sonuç sıfırdan küçük");

    }
    private Zamanlama çözümle(int eklenecekMilisaniye) throws Exception
    {
        Zamanlama eklenecek;
        if(eklenecekMilisaniye<1000)
            eklenecek=new Zamanlama(0, 0, 0, eklenecekMilisaniye);
        else if(eklenecekMilisaniye<60000)
            eklenecek=new Zamanlama(0, 0, eklenecekMilisaniye/1000, eklenecekMilisaniye%1000);
        else if(eklenecekMilisaniye<3600000){
            int eklenecekDakika=eklenecekMilisaniye/60000;
            eklenecekMilisaniye=eklenecekMilisaniye-eklenecekDakika*60000;
            int eklenecekSaniye=eklenecekMilisaniye/1000;
            eklenecek=new Zamanlama(0,eklenecekDakika, eklenecekSaniye, eklenecekMilisaniye%1000);
        }else if(eklenecekMilisaniye<356400000){
            int eklenecekSaat=eklenecekMilisaniye/3600000;
            eklenecekMilisaniye=eklenecekMilisaniye-eklenecekSaat*3600000;
            int eklenecekDakika=eklenecekMilisaniye/60000;
            eklenecekMilisaniye=eklenecekMilisaniye-eklenecekDakika*60000;
            int eklenecekSaniye=eklenecekMilisaniye/1000;
            eklenecek=new Zamanlama(eklenecekSaat, eklenecekDakika,eklenecekSaniye, eklenecekMilisaniye%1000);
        }else
            throw new Exception("girilen değer çok büyük");

        return eklenecek;
    }

    @Override
    public String toString()
    {
        String temp="";
        if(saat<10)
            temp+="0"+saat;
        else
            temp+=saat;
        temp+=":";
        if(dakika<10)
            temp+="0"+dakika;
        else
            temp+=dakika;
        temp+=":";
        if(saniye<10)
            temp+="0"+saniye;
        else
            temp+=saniye;
        temp+=",";
        if(milisaniye>=100)
            temp+=milisaniye;
        else if(milisaniye>=10)
            temp+="0"+milisaniye;
        else
            temp+="00"+milisaniye;
        return temp;
    }
}
